home *** CD-ROM | disk | FTP | other *** search
/ Multimedia Jumpstart / Multimedia Microsoft Jumpstart Version 1.1a (Microsoft).BIN / develpmt / source / sprites / fast16.asm < prev    next >
Encoding:
Assembly Source File  |  1993-04-03  |  2.3 KB  |  124 lines

  1.     page ,132
  2.  
  3.     TITLE FAST16.ASM
  4.  
  5. ; This is obsolete and replaced by FAST32.ASM it is here for
  6. ; reference only
  7. ;
  8.  
  9.  
  10. ?PLM=1      ; PASCAL Calling convention is DEFAULT
  11. ?WIN=0      ; Windows calling convention
  12. ?DF=0       ; don't define anything
  13.  
  14.     .xlist
  15.     include cmacros.inc
  16.     .list
  17.  
  18. ifndef SEGNAME
  19.     SEGNAME equ <FAST_TEXT>
  20. endif
  21.  
  22. createSeg %SEGNAME, CodeSeg, word, public, CODE
  23.  
  24. sBegin Data
  25. sEnd Data
  26.  
  27. sBegin CodeSeg
  28.         assumes cs,CodeSeg
  29.         assumes ds,nothing
  30.         assumes es,nothing
  31.  
  32. ;
  33. ; Copy a block
  34. ;
  35.  
  36. cProc CopyBlock,<FAR, PASCAL, PUBLIC>,<>
  37.  
  38.     ParmD   pDest
  39.     ParmD   pSource
  40.     ParmD   dwWidth
  41.     ParmD   dwHeight
  42.     ParmD   dwScanD
  43.     ParmD   dwScanS
  44.     ParmB   bTranClr
  45.  
  46.     LocalD  dwOffS
  47.     LocalD  dwOffD
  48.  
  49. cBegin
  50.         .386
  51.         align   4
  52.  
  53.         push ds
  54.         push es
  55.         push esi
  56.         push edi
  57.  
  58.         mov ecx, dwWidth
  59.         jecxz copyblock_nomore  ; test for silly case
  60.  
  61.         mov edx, dwHeight       ; EDX is line counter
  62.         mov ah, bTranClr        ; AH has transparency color
  63.  
  64.         xor esi, esi
  65.         lds si, pSource         ; DS:[ESI] point to source
  66.         mov dwOffS, esi         ; save offset
  67.  
  68.         xor edi, edi
  69.         les di, pDest           ; ES:[EDI] point to dest
  70.         mov dwOffD, edi         ; save offset
  71.  
  72. copyblock_morelines:
  73.  
  74.         and edx, edx
  75.         jz copyblock_nomore
  76.  
  77.         mov esi, dwOffS         ; DS:[ESI] point to source
  78.         mov edi, dwOffD         ; ES:[EDI] point to dest
  79.         mov ecx, dwWidth        ; ECX is pixel counter
  80.  
  81. copyblock_morepixels:
  82.  
  83.         mov al, ds:[esi]
  84.         cmp al, ah
  85.         jz copyblock_nextpixel
  86.  
  87.         mov es:[edi], al
  88.  
  89. copyblock_nextpixel:
  90.  
  91.         inc esi
  92.         inc edi
  93.  
  94.         dec ecx
  95.         jnz copyblock_morepixels
  96.  
  97.         ; move on to the start of the next line
  98.  
  99.         mov esi, dwOffS
  100.         add esi, dwScanS
  101.         mov dwOffS, esi
  102.  
  103.         mov esi, dwOffD
  104.         add esi, dwScanD
  105.         mov dwOffD, esi
  106.  
  107.         dec edx                 ; line counter
  108.         jmp copyblock_morelines
  109.  
  110. copyblock_nomore:
  111.  
  112.         pop edi
  113.         pop esi
  114.         pop es
  115.         pop ds
  116.  
  117.         .286
  118. cEnd
  119.  
  120. sEnd CodeSeg
  121. end
  122.  
  123.